package com.ruoyi.contract.tools;
//import net.sourceforge.pinyin4j.PinyinHelper;
//import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
//import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
//import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
//import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
* @program: Smart-contract-management-system-replica-system
*
* @description: 中文提取拼音首字母，小写英文字母转换为大写
*
* @author: coderChen
*
* @create: 2024-10-18 15:22
**/

public class ChineseUtil {

    /**
     * 获取字符串中每个中文字符的拼音首字母，并转换小写英文为大写。
     * @param chinese 包含中文字符的字符串
     * @return 返回由每个中文字符拼音首字母组成的字符串，英文部分转换为大写
     */
    public static String getFirstLetter(String chinese) {
        StringBuilder pinyinStr = new StringBuilder();
        char[] newChar = chinese.toCharArray();

        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        //设置为拼音大写
        defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        //设置为不带声调
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        // 遍历字符数组，对每个字符进行处理
        for (char c : newChar) {
            if (c > 128) { // 判断是否为中文字符
                try {
                    // 获取第一个拼音并取首字母
                    pinyinStr.append(PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat)[0].charAt(0));
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else if (Character.isLowerCase(c)) { // 判断是否为小写英文字母
                // 转换为大写
                pinyinStr.append(Character.toUpperCase(c));
            } else {
                // 非中文字符且非小写英文字母，直接添加
                pinyinStr.append(c);
            }
        }

        return pinyinStr.toString();
    }

    /**
     * 获取字符串中每个中文字符的完整拼音，并转换小写英文为大写。
     * @param chinese 包含中文字符的字符串
     * @return 返回由每个中文字符拼音组成的字符串，英文部分转换为大写
     */
    public static String getPinyin(String chinese) {
        StringBuilder pinyinStr = new StringBuilder();
        char[] newChar = chinese.toCharArray();

        // 设置拼音输出格式：大写且不带声调
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        // 遍历字符数组，对每个字符进行处理
        for (char c : newChar) {
            if (c > 128) { // 判断是否为中文字符
                try {
                    // 获取第一个拼音
                    pinyinStr.append(PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat)[0]);
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else if (Character.isLowerCase(c)) { // 判断是否为小写英文字母
                // 转换为大写
                pinyinStr.append(Character.toUpperCase(c));
            } else {
                // 非中文字符且非小写英文字母，直接添加
                pinyinStr.append(c);
            }
        }

        return pinyinStr.toString();
    }
}

